home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PCGUIA 117
/
PC Guia 117.iso
/
Software
/
Utils
/
Software2
/
Product11
/
Setup.exe
/
MT-3.16-full-en_US
/
mt-db2sql.cgi
< prev
next >
Wrap
Text File
|
2005-03-08
|
5KB
|
148 lines
#!/usr/bin/perl -w
# Copyright 2001-2005 Six Apart. This code cannot be redistributed without
# permission from www.movabletype.org.
#
# $Id: mt-db2sql.cgi 10197 2005-03-09 00:27:57Z ezra $
use strict;
my($MT_DIR);
BEGIN {
if ($0 =~ m!(.*[/\\])!) {
$MT_DIR = $1;
} else {
$MT_DIR = './';
}
unshift @INC, $MT_DIR . 'lib';
unshift @INC, $MT_DIR . 'extlib';
}
local $| = 1;
print "Content-Type: text/html\n\n";
print "<pre>\n\n";
my @CLASSES = qw( MT::Author MT::Blog MT::Category MT::Comment MT::Entry
MT::IPBanList MT::Log MT::Notification MT::Permission
MT::Placement MT::Template MT::TemplateMap MT::Trackback
MT::TBPing );
use File::Spec;
eval {
local $SIG{__WARN__} = sub { print "**** WARNING: $_[0]\n" };
require MT;
my $mt = MT->new( Config => $MT_DIR . 'mt.cfg', Directory => $MT_DIR )
or die MT->errstr;
require MT::Object;
my($type) = $mt->{cfg}->ObjectDriver =~ /^DBI::(.*)$/;
MT::Object->set_driver('DBI::' . $type)
or die MT::ObjectDriver->errstr;
my $dbh = MT::Object->driver->{dbh};
my $schema = File::Spec->catfile($MT_DIR, 'schemas', $type . '.dump');
open FH, $schema or die "Can't open schema file '$schema': $!";
my $ddl;
{ local $/; $ddl = <FH> }
close FH;
my @stmts = split /;/, $ddl;
print "Loading database schema...\n\n";
for my $stmt (@stmts) {
$stmt =~ s!^\s*!!;
$stmt =~ s!\s*$!!;
next unless $stmt =~ /\S/;
$dbh->do($stmt) or die $dbh->errstr;
}
## %ids will hold the highest IDs of each class.
my %ids;
print "Loading data...\n";
for my $class (@CLASSES) {
print $class, "\n";
MT::Object->set_driver('DBM');
eval "use $class";
my $iter = $class->load_iter;
my %names;
MT::Object->set_driver('DBI::' . $type);
while (my $obj = $iter->()) {
print " ", $obj->id, "\n";
$ids{$class} = $obj->id
if !$ids{$class} || $obj->id > $ids{$class};
## Look for duplicate template, category, and author names,
## because we have uniqueness constraints in the DB.
if ($class eq 'MT::Template') {
my $key = lc($obj->name) . $obj->blog_id;
if ($names{$class}{$key}++) {
print " Found duplicate template name '" .
$obj->name;
$obj->name($obj->name . ' ' . $names{$class}{$key});
print "'; renaming to '" . $obj->name . "'\n";
}
## Touch the text column to make sure we read in
## any linked templates.
my $text = $obj->text;
} elsif ($class eq 'MT::Author') {
my $key = lc($obj->name);
if ($names{$class . $obj->type}{$key}++) {
print " Found duplicate author name '" .
$obj->name;
$obj->name($obj->name . ' ' . $names{$class}{$key});
print "'; renaming to '" . $obj->name . "'\n";
}
$obj->email('') unless defined $obj->email;
$obj->set_password('') unless defined $obj->password;
} elsif ($class eq 'MT::Category') {
my $key = lc($obj->label) . $obj->blog_id;
if ($names{$class}{$key}++) {
print " Found duplicate category label '" .
$obj->label;
$obj->label($obj->label . ' ' . $names{$class}{$key});
print "'; renaming to '" . $obj->label . "'\n";
}
} elsif ($class eq 'MT::Trackback') {
$obj->entry_id(0) unless defined $obj->entry_id;
$obj->category_id(0) unless defined $obj->category_id;
} elsif ($class eq 'MT::Entry') {
$obj->allow_pings(0)
if defined $obj->allow_pings && $obj->allow_pings eq '';
$obj->allow_comments(0)
if defined $obj->allow_comments && $obj->allow_comments eq '';
}
$obj->save
or die $obj->errstr;
}
print "\n";
}
if ($type eq 'postgres') {
print "Updating sequences\n";
my $dbh = MT::Object->driver->{dbh};
for my $class (keys %ids) {
print " $class => $ids{$class}\n";
my $seq = 'mt_' . $class->datasource . '_' .
$class->properties->{primary_key};
$dbh->do("select setval('$seq', $ids{$class})")
or die $dbh->errstr;
}
}
};
if ($@) {
print <<HTML;
An error occurred while loading data:
$@
HTML
} else {
print <<HTML;
Done copying data from Berkeley DB to your SQL database! All went well.
HTML
}
print "</pre>\n";